package com.itheima.health.utils;

import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.lang.reflect.Field;
import java.util.Date;
import java.util.List;

public class WorkBookUtils {

    public static Workbook CreateWorkBook(List list) throws IllegalAccessException {
        // 非空判断
        if (list == null || list.size() <= 0) {
            return null;
        }
        // 创建工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();
        // 创建sheet工作表对象
        XSSFSheet sheet = workbook.createSheet("taku");

        // 第一行放属性名
        XSSFRow row0 = sheet.createRow(0);
        // 遍历list
        for (int i = 0; i < list.size(); i++) {
            Object object = list.get(i);
            // 获取字节码对象
            Class<?> clazz = object.getClass();
            // 通过字节码对象获取对象的private属性
            Field[] fields = clazz.getDeclaredFields();
            // 创建第i+1行
            XSSFRow row = sheet.createRow(i + 1);
            // 自动宽度
            sheet.autoSizeColumn(i + 1, true);
            // 通过反射获取对应属性的值
            for (int j = 0; j < fields.length; j++) {
                // 暴力破解
                Field field = fields[j];

                field.setAccessible(true);
                // 第一次获取对象属性时赋值
                if (i < 1) {
                    String name = field.getName();
                    row0.createCell(j).setCellValue(name);
                }
                // 获取值
                Object value = field.get(object);
                Class<?> type = field.getType();
                if (Date.class == type) {
                    Date date = (Date) field.get(object);
                    // 往第i行的第j列中插入value
                    XSSFCell cell = row.createCell(j);
                    // 值以String方式输出
                    cell.setCellValue(date);
                    continue;
                }

                // 往第i行的第j列中插入value
                XSSFCell cell = row.createCell(j);
                // 值以String方式输出
                cell.setCellValue(value.toString());
            }

        }
        // 返回工作表对象
        return workbook;
    }

}
